Java进阶-StringBuffer 和 StringBuilder

java.lang.StringBufferjava.lang.StringBuilder

  1. 是一个字符串缓存区

  2. 工作原理:预先在内存中申请一块空间,以容纳字符序列,如果预留的空间不够用,则进行自动扩容,以容纳更多字符序列

  3. String 最大的区别

    • String 是不可变的字符序列,存储在字符串常量池中
    • StringBufferStringBuilder 底层是一个 char 数组,但是该数组是可变的,并且可以自动扩容
  4. StringBufferStringBuilder 的默认初始化容量是 16

  5. 如何优化 StringBufferStringBuilder 呢?

    • 最好在创建前,预测存储字符数量,然后在创建的时候采用指定初始化容量的方式。为了减少底层数组的拷贝,提高效率。
  6. StringBufferStringBuilder区别

    • 前者是线程安全的(可以在多线程的环境下使用,不会出现问题)
    • 后者是非线程安全的(在多线程环境下使用可能出现问题)
    • 执行速度方面的比较:StringBuilder > StringBuffer > String
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public class StringTest02 {

public static void main(String[] args) {
// 创建字符串缓冲区对象
StringBuffer sb = new StringBuffer();

// 可以向 StringBuffer 中追加字符串
String[] ins = { "体育", "音乐", "睡觉" };

// 推荐字符串频繁拼接使用 StringBuffer 或 StringBuilder
for (int i = 0; i < ins.length; i++) {
if (i == ins.length - 1) {
sb.append(ins[i]);
} else {
sb.append(ins[i]);
sb.append(",");
}
}

System.out.println(sb); // 体育,音乐,睡觉
}
}